package cn.com.dao;

import cn.com.utils.ConnUtils;
import cn.com.vo.StuVo;

import javax.xml.transform.Result;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

/**
 * @author ：khc
 * @date ：Created in 2021/12/15 16:28
 * @description：
 * @modified By：
 * @version: $
 */
public class StuDao {
    //添加学生信息
    public int addStu(StuVo vo){
        int result = 0;//0添加失败  1添加成功
        //定义Connection
        Connection conn = null;
        //定义PreparedStatement
        PreparedStatement stmt = null;//用来操作数据库表
        //sql语句
        String sql = "insert into studentinfo(name,age,phone,address) value(?,?,?,?)";
        try{
            //获取连接对像
            conn = ConnUtils.getConnection();
            //创建stmt对像
            stmt = conn.prepareStatement(sql);
            //设置动态参数
            stmt.setString(1,vo.getName());
            stmt.setInt(2,vo.getAge());
            stmt.setString(3,vo.getPhone());
            stmt.setString(4,vo.getAddress());
            //执行sql语句
            result = stmt.executeUpdate();

        }catch(Exception e){
            e.printStackTrace();
        }finally{//释放资源。归还连接对像
            ConnUtils.close(conn,stmt);
        }
        return result;
    }

    /**
     * 删除指定学号的学生信息
     * @param stuid 学号
     * @return  是否删除成功  0删除失败   1删除成功
     */
    public int delStu(int stuid){
        int result = 0;//返回结果
        //定义连接对像
        Connection conn = null;
        //定义stmt对像
        PreparedStatement stmt = null;
        //定义sql语句  根据学号删除学生信息
        String sql = "delete from studentinfo where stuid=?";
        try{
            //获取连接对像
            conn = ConnUtils.getConnection();
            //获取stmt对像
            stmt = conn.prepareStatement(sql);
            //设置参数
            stmt.setInt(1,stuid);
            //执行sql
            result = stmt.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //释放资源
            ConnUtils.close(conn,stmt);
        }
        return result;
    }

    //修改学生信息
    public int updateStu(StuVo vo){
        int result = 0;
        //1定义连接对像
        Connection conn = null;
        //2定义stmt对像
        PreparedStatement stmt = null;
        //定义sql  修改学生信息
        String sql = "update studentinfo set name=?,age=?,phone=?,address=? where stuid=?";
        try{
            //获取连接对像
            conn = ConnUtils.getConnection();
            //获取stmt对像
            stmt = conn.prepareStatement(sql);
            //设置参数
            stmt.setString(1,vo.getName());
            stmt.setInt(2,vo.getAge());
            stmt.setString(3,vo.getPhone());
            stmt.setString(4,vo.getAddress());
            stmt.setInt(5,vo.getStuid());
            //执行sql
            result = stmt.executeUpdate();

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //释放资源
            ConnUtils.close(conn,stmt);
        }

        return result;
    }

    //查询学生总数
    public int queryStuCount(){
        int count = 0;
        //定义连接对像
        Connection conn = null;
        //stmt
        PreparedStatement stmt = null;
        //定义ResultSet
        ResultSet rs = null;
        //定义sql
        String sql = "select count(*) from studentinfo";
        try{
            //获取连接对像
            conn = ConnUtils.getConnection();
            //获取stmt对像
            stmt = conn.prepareStatement(sql);
            //执行sql
            rs = stmt.executeQuery();
            if(rs.next()){
                //
                count = rs.getInt(1);
            }

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //释放资源
            ConnUtils.close(conn,stmt,rs);
        }

        return count;
    }
    //查询学生表中所有的数据
    public static List<StuVo> queryStuInfo(){
        //list集合对像，用来存储 多个学生对像
        List<StuVo> list = new ArrayList<>();
        //定义Connection
        Connection conn = null;
        //定义stmt
        PreparedStatement stmt = null;
        //定义ResultSet
        ResultSet rs = null;
        //定义sql
        String sql = "select *from studentinfo";
        try{
            //获取连接对像
            conn = ConnUtils.getConnection();
            //获取stmt对像
            stmt = conn.prepareStatement(sql);
            //执行sql语句
            rs = stmt.executeQuery();
            //循环取数据
            while(rs.next()){ //rs.next一条一条的取数据
                StuVo vo = new StuVo();
                vo.setStuid(rs.getInt(1));
                vo.setName(rs.getString(2));
                vo.setAge(rs.getInt(3));
                vo.setPhone(rs.getString(4));
                vo.setAddress(rs.getString(5));
                //把vo对像添加到List集合中
                list.add(vo);
            }

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //释放资源
            ConnUtils.close(conn,stmt,rs);
        }

        return list;
    }

    //分页显示学生信息

    /**
     *
     * @param curPage  页码
     * @param rowsPrePage 每页码显示几条数据
     * @return
     */
    public Vector queryStuPage(int curPage, int rowsPrePage){
        //创建list用来存储 多个学生信息
        List<StuVo> list = new ArrayList<>();
        Vector vector = new Vector();
        //定义连接对像
        Connection conn = null;
        //定义stmt对象
        PreparedStatement stmt = null;
        //定义结果集
        ResultSet rs = null;
        //定义分页查询的sql
        String sql = "select *from studentinfo limit ?,?";
        try{
            //获取连接对像
            conn = ConnUtils.getConnection();
            //获取stmt对像
            stmt = conn.prepareStatement(sql);
            //设置动态参数
            stmt.setInt(1,(curPage-1)*rowsPrePage);
            stmt.setInt(2,rowsPrePage);
            //执行sql
            rs = stmt.executeQuery();
            while (rs.next()){  //游标
                /*StuVo vo = new StuVo();
                vo.setStuid(rs.getInt(1));
                vo.setName(rs.getString(2));
                vo.setAge(rs.getInt(3));
                vo.setPhone(rs.getString(4));
                vo.setAddress(rs.getString(5));

                 */
                Vector vo = new Vector();
                vo.addElement(rs.getInt(1));
                vo.addElement(rs.getString(2));
                vo.addElement(rs.getInt(3));
                vo.addElement(rs.getString(4));
                vo.addElement(rs.getString(5));
                //把vo对像添加到List集合中
                vector.addElement(vo);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //释放资源
            ConnUtils.close(conn,stmt,rs);
        }
        return vector;
    }

    //main test
    public static void main(String args[]){
        //创建一个学生对像
       /* cn.com.vo.StuVo vo = new cn.com.vo.StuVo("如花",28,"432432","湖南长沙 ");
        //1 保存到数据库表中
        int result = addStu(vo);
        System.out.println(result>0?"数据添加成功!":"数据添加失败!");
*/
        //2 删除指定学号的学生信息
        //int result = delStu(2);
        //System.out.println(result>0?"数据删除成功!":"数据删除失败!");

        //3 修改指定学号的学生信息
         //创建学生对像
        /*
        cn.com.vo.StuVo vo2 = new cn.com.vo.StuVo("张三",19,"231231","湖南常德");
        vo2.setStuid(3);
        int result = updateStu(vo2);
        System.out.println(result>0?"数据修改成功!":"数据修改失败!");

         */

        //4: 查询学生表的总记录
        /*
        System.out.println("学生总数："+queryStuCount());
        //5:查询所有的学生信息
        List<StuVo> list = queryStuInfo();
        for(StuVo vo:list){
            System.out.println("学号:"+vo.getStuid());
            System.out.println("姓名:"+vo.getName());
            System.out.println("年龄:"+vo.getAge());
            System.out.println("电话:"+vo.getPhone());
            System.out.println("地址:"+vo.getAddress());
            System.out.println("=============================");
        }
        //分页查询
        System.out.println("----------分页查询----------");
        List<StuVo> list2 = queryStuPage(1,5);
        for(StuVo vo:list2){
            System.out.println("学号:"+vo.getStuid());
            System.out.println("姓名:"+vo.getName());
            System.out.println("年龄:"+vo.getAge());
            System.out.println("电话:"+vo.getPhone());
            System.out.println("地址:"+vo.getAddress());
            System.out.println("+++++++++++++++++++++++");
        }

         */
    }
}
